typedef double DataType;
typedef struct Node
{
	DataType data;
	struct Node *next;
}ListNode;

bool InitialList(ListNode *head);
ListNode *InitialList();
bool ListEmpty(ListNode *head);
ListNode* Get(ListNode *head, int i);
ListNode* Get(ListNode *head, DataType data);
int LocatePos(ListNode *head, DataType data);
bool InsertList(ListNode *head, int i, DataType data);
void PushList(ListNode *head, DataType data);
bool DeleteList(ListNode *head, int i, DataType *e);
int ListLength(ListNode *head);
void DestroyList(ListNode *head);
void ClearList(ListNode *pList);
void PrintList(ListNode *head);

void ReverseList(ListNode *head);
void PrintListReversingly_Recursively(ListNode *head);
void PrintListReversingly_Iteratively(ListNode *head);
void DeleteNode(ListNode *head, ListNode *pNode);
ListNode * FindKthToTail(ListNode *pHead, unsigned int k);
ListNode *MergeLists(ListNode *pSource1, ListNode *pSource2);